LLM 幻觉¶
LLM 幻觉排查可以按从输入 到输出的链路分层定位,建议按以下顺序排查(成本由低到高):
1. Prompt 层(最常见,先查这里)¶
- 指令是否清晰:有没有模糊词("适当"、"一些"、"相关")让模型自由发挥
- 是否给了"不知道就编"的暗示:缺少
"如果不确定,请回答不知道"这类兜底 - Few-shot 示例质量:示例本身是否准确,是否引导模型走偏
- 角色设定过强:让模型"扮演专家"反而会让它过度自信编造
2. Context / 上下文层¶
- RAG 检索质量:
- 召回的文档是否真的相关(Recall vs Precision)
- Chunk 切分是否破坏了语义完整性
- 检索结果是否被正确注入 Prompt(位置、格式)
- Context 过长:超出有效注意力窗口,模型"忘了"前面的事实(Lost in the middle)
- 上下文冲突:多个来源信息矛盾,模型选了错的那个
- Memory 污染:历史对话里的错误结论被带入新对话
3. 模型层¶
- 模型能力不匹配:用小模型做复杂推理任务
- 采样参数:
temperature过高 → 输出发散top_p过宽 → 低概率 token 被采到- 知识时效性:问的是训练截止后的事实
- 领域外问题:模型在该领域本身就缺乏训练数据
4. 任务设计层¶
- 任务粒度过大:一次让模型做太多步骤,应该用 CoT 或拆成多步 Agent
- 缺少外部验证:纯靠模型自身生成 vs 调用工具/数据库查证
- 没有结构化输出约束:自由文本比 JSON Schema 更容易胡编
5. 工具与数据层(Agent 场景)¶
- Tool description 不准确:模型误用工具,把结果"脑补"成另一种含义
- 工具返回值被截断/格式错乱:模型基于残缺数据继续推理
- Tool 调用失败时的 fallback:失败后模型是否会"假装查到了"
6. 评估层(如何确认是幻觉而非合理推断)¶
- 可复现性:固定 seed/temperature=0 是否仍出错
- Groundedness 检查:输出的事实是否都能在 context 中找到来源
- 对比实验:换模型、换 Prompt、换检索结果,定位变量
排查优先级建议¶
先看 Prompt(改一行字可能就好)
└─ 再看 RAG/Context(数据问题占大头)
└─ 再调采样参数
└─ 最后才考虑换模型 / Fine-tune
需要我针对你具体遇到的幻觉案例做定向分析吗?如果有的话,把 Prompt + 输入 + 期望输出 + 实际输出贴出来,能更精准定位。